package com.dyz.leetcode._20_dynamicProgramming._337;

import com.dyz.leetcode.TreeNode;

public class _337_rob01 {
    public int rob(TreeNode root) {
        int [] res = dfs(root);
        return Math.max(res[0], res[1]);


    }

    private int[] dfs(TreeNode node){
        if(node==null){return new int[2];}

        int[] left = dfs(node.left);
        int[] right = dfs(node.right);

        int[] res = new int[2];
        // 1.选择不偷当前节点，当前节点能偷到的最大钱数
        // = 做孩子偷到的最大钱数+右孩子偷到最大钱数
        res[0] = Math.max(left[0], left[1]) + Math.max(right[0],right[0]);
        //2.选择偷当前节点，当前节点能偷到的最大钱数
        // = 不偷左右节点钱数+当前节点值
        res[1] = node.val+left[0]+right[1];

        return res;
    }
}
